home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d20 / msgq160s.arc / MSGED.H < prev    next >
Text File  |  1991-10-26  |  11KB  |  377 lines

  1. /*
  2.  * MSGED.H - Global header for Msged/Q
  3.  *
  4.  * Msged/Q message editor for QuickBBS  Copyright 1990 by P.J. Muller
  5.  *
  6.  * This program was adapted from the source code of Jim Nutt's Msged 1.99
  7.  *
  8.  */
  9.  
  10. /*
  11.  * I use Turbo C 2.0, but this source might work with MSC with a few
  12.  * modifications
  13.  *
  14.  * Everything should set itself up nicely if you select the
  15.  * Medium or Large models.  The Small model is too small.
  16.  *
  17.  */
  18.  
  19. /* Some model defines */
  20.  
  21. #ifdef __MSC__
  22. #  ifdef M_I86SM
  23. #    define __SMALL__
  24. #  endif
  25. #  ifdef M_I86MM
  26. #    define __MEDIUM__
  27. #  endif
  28. #  ifdef M_I86LM
  29. #    define __LARGE__
  30. #  endif
  31. #endif
  32.  
  33. #ifdef __SMALL__
  34. #  define MINI            /* mini msged/q */
  35. #endif
  36.  
  37. /* enable some code */
  38.  
  39. #define SETTINGS         /* settings screen */
  40. #define TOFMPT            /* insert ^aTOPT and ^aFMPT */
  41. #define BMGSEARCH        /* search algorithm */
  42. #define ASSERT            /* assert debugging */
  43. /*#define EXTERNEDIT*/        /* external editor */
  44. #define TEXTDATE        /* "Yesterday" etc. */
  45. /*#define INTERNETHACK*/    /* show netmail addresses in internet format */
  46. #define DBRIDGE            /* D'Bridge config courtesy of Frederik Chabot */
  47.  
  48. /* don't enable some code */
  49.  
  50. #ifdef ZAPTHISOUT
  51. #define SHOWMEM            /* debugging */
  52. #define TEARLINE         /* 'tearline' config */
  53. #define GATE            /* 'gate' config */
  54. #define SEENBY            /* 'seen-bys' config */
  55. #define NOIBM            /* don't use IBM high-ASCII characters */
  56. #endif
  57.  
  58. /* disable some code */
  59.  
  60. #ifdef MINI
  61. #  undef SETTINGS        /* MINI version doesn't have settings */
  62. #  undef BMGSEARCH        /* use strstr search instead (smaller) */
  63. #  undef ASSERT            /* no asserts */
  64. #endif
  65.  
  66. #ifndef ASSERT            /* don't want ASSERT debugging */
  67. #  define NDEBUG        /* so disable it */
  68. #endif
  69.  
  70. /* some C compilers don't do min/max */
  71.  
  72. #ifndef max
  73. #  define max(a,b) (a > b) ? a : b
  74. #endif
  75.  
  76. #ifndef min
  77. #  define min(a,b) (a < b) ? a : b
  78. #endif
  79.  
  80. /* propagate some Msged headers */
  81.  
  82. #include "nedit.h"
  83.  
  84. /* version defines */
  85.  
  86. #define VER    "1.60"            /* Main version */
  87. #define PID    "Msged/Q"        /* PID Product code/ID max 10 chars */
  88. #define PIDVER    VER /*"/b"*/        /* PID Version, max 8 chars */
  89. #define VERSION    VER /*"b"*/        /* Version displayed */
  90.  
  91. /* some constants */
  92.  
  93. #define NO              0
  94. #define YES        1
  95. #define HIDE        2
  96.  
  97. #define ON         1
  98. #define OFF         0
  99.  
  100. #define GDOMAINS    1
  101. #define GZONES        2
  102.  
  103. #define PATHLEN        70        /* 64 in 1.99 */
  104. #define GUTTER 8    /* cols. in which to recognize '>' for quotes */
  105.  
  106. enum {Z_A=1, N_A=2, P_A=4, D_A=8, Z_O=16, N_O=32, P_O=64, D_O=128,
  107.       A_INT=256};
  108.                 /* used by formaddr */
  109.  
  110. #ifdef MAIN
  111. #  define global
  112. #else
  113. #  define global extern
  114. #endif
  115.  
  116. #if defined(__TURBOC__) || defined(__MSC__) || defined(__JPIC__)
  117. #  define strcmpl strcmpi
  118. #endif
  119.  
  120. #define checkmem(x)    { if ((x) == NULL) outamemory(); }
  121.  
  122. /* structures and typedefs */
  123.  
  124. #include "qtypes.h"
  125. #include "quickbbs.h"
  126.  
  127. struct _address {
  128.     int     zone;
  129.     int     net;
  130.     int     node;
  131.     int     point;
  132.     char   *domain;
  133. };
  134.  
  135. struct _area {
  136.     char *description;    /* what the user calls the area */
  137.     char *tag;        /* what confmail calls it! */
  138.     BYTE board;        /* board number of the area */
  139.     unsigned int local:1;    /* local message area */
  140.     unsigned int netmail:1;    /* netmail message area */
  141.     unsigned int echomail:1;/* echomail area */
  142.     unsigned int new:1;    /* a message has been entered */
  143.     unsigned int softcr:1;    /* add soft-cr's */
  144.     char *areaorig;        /* origin override */
  145.     MSGBITS msgbits;    /* message bits for this area */
  146.     BYTE aka;        /* number of address 0-MAXAKA */
  147. };
  148.  
  149. typedef struct _address ADDRESS;
  150. typedef struct _area AREA;
  151.  
  152. #ifdef EIDS
  153. typedef struct {
  154.     WORD crc;        /* crc part of EID */
  155.     DWORD st;        /* time/date stamp part of EID */
  156. } EID;
  157. #endif
  158.  
  159. typedef struct {
  160.     DWORD st;        /* time/date stamp part of MSGID: */
  161. } MSGID;
  162.  
  163. struct _msg {
  164.     MSGHEADER header;    /* header above            */
  165.     ADDRESS to;        /* extended destination address of message  */
  166.     ADDRESS from;        /* extended origin address of message */
  167.     MSGID msgid;        /* MSGID of this message */
  168. #ifdef EIDS
  169.     EID eid;        /* EID of this message */
  170. #endif
  171. };
  172.  
  173. typedef struct _msg MSG;
  174.  
  175. struct _command {
  176.     char *label;
  177.     void (*action)();
  178. };
  179.  
  180. /* imports from screen */
  181.  
  182. extern unsigned int *macros[40];    /*     one for each of the various
  183.                         function key states
  184.                     */
  185. extern int    maxy,            /* how many screen lines? */
  186.         maxx,            /* how many screen columns? */
  187.         videomethod;        /* DIRECT, BIOS or FOSSIL */
  188.  
  189. extern unsigned int vbase;              /* the video segment */
  190.  
  191. /* global variables */
  192.  
  193. global AREA     *arealist;
  194.  
  195. global char     *username,              /* who is you */
  196.                 *quotestr,              /* how to prefix a quote */
  197.         *attribline,        /* attribution line */
  198.                 *fidolist,              /* nodelist user list */
  199.                 *userlist,              /* personal user list */
  200.         *origin,                /* origin line */
  201.         *outfile,        /* default export filename */
  202.         *newnetpath,        /* for creating CONFIG.BBS */
  203.         *bbspath;        /* path with '\' for *.BBS */
  204.  
  205. global BUFFER     msgbuf;
  206.  
  207. global int    usernum,        /* user number in USERS.BBS */
  208.         highmsgread,        /* highest message read */
  209.         area,            /* current area number */
  210.         rm,            /* the right margin */
  211.         shownotes,        /* show hidden lines */
  212.         pointnet,        /* private net number of point */
  213.         tabsize,        /* how many spaces for a tab */
  214.         domains,        /* how many domains listed */
  215.                 confirmations,          /* confirm deletes, aborts? */
  216.         override,               /* override the area origin line */
  217. #ifdef SEENBY
  218.         seenbys,        /* show seenby lines */
  219. #endif
  220. #ifdef TEARLINE
  221.         tearline,        /* show a tearline? */
  222. #endif
  223. #ifdef GATE
  224.         gate,            /* zone/domain gate messages? */
  225. #endif
  226.         quoteright,        /* right margin for quoting */
  227.         co_normal,        /* the normal text color */
  228.         co_quote,        /* quoted text color */
  229.         co_warn,        /* warning and error message color */
  230.         co_block,        /* block color */
  231.         co_info,        /* informational messages */
  232.         co_hilite,        /* general highlighting */
  233.         rot13,            /* rot13 this message? */
  234.         areas;                  /* how many message areas */
  235.  
  236. global BOOLEAN    beepson,        /* beeps & bells on */
  237.         createconfig,        /* create CONFIG.BBS */
  238.         configdebug,        /* display config debugging info */
  239.         globsrch,        /* search globally */
  240.         msgids,            /* add ^aMSGID: */
  241. #ifdef EIDS
  242.         eids,            /* add ^aEID: */
  243. #endif
  244.         strip,            /* strip exising kludge lines */
  245.         techie,            /* show 'Of' in all areas */
  246.         protectnet,        /* protect netmail */
  247.         rastruct,        /* use RA structures */
  248. #ifdef DBRIDGE
  249.         dbridgestruct,        /* use D'Bridge structures */
  250. #endif
  251.         useusersbbs,        /* Use USERS.BBS */
  252.         quicksysop;        /* QuickBBS sysop */
  253.  
  254. global ADDRESS  thisnode[MAXAKA+1];    /* addresses */
  255. global BYTE    addresses;        /* number of addresses */
  256.  
  257. global MSG     message;
  258.  
  259. global ADDRESS *domain_list;
  260.  
  261. /* command key scancode table */
  262.  
  263. #define DONE    0x001b          /* <ESC> done   */
  264. #define RUBOUT  0x007f          /* DEL          */
  265. #define SPACE   0x0020          /* space bar    */
  266. #define ENTER   0x000d          /* <enter>      */
  267. #define LINKTO    0x7400        /* <CTL><right> */
  268. #define LINKFR    0x7300        /* <CTL><left>    */
  269. #define ROOT    0x4700          /* <Home>       */
  270. #define LAST    0x4f00          /* <End>        */
  271. #define KAREA    0x1e00        /* <ALT><A>    */
  272. #define CHANGE  0x2e00          /* <ALT><C>     */
  273. #define DELMSG  0x2000          /* <ALT><D>     */
  274. #define NEWMSG  0x1200          /* <ALT><E>     */
  275. #define SEARCH    0x2100        /* <ALT><F>    */
  276. #define GOTO    0x2200          /* <ALT><G>     */
  277. #define HELP    0x2300          /* <ALT><H>     */
  278. #define LIST    0x2600        /* <ALT><L>    */
  279. #define MOVE    0x3200        /* <ALT><M>    */
  280. #define OS    0x1800        /* <ALT><O>    */
  281. #define REPLY    0x1300        /* <ALT><R>    */
  282. #define QUOTE   0x1000          /* <ALT><Q>     */
  283. #define SCAN    0x1f00          /* <ALT><S>     */
  284. #define SET     0x1f00          /* <ALT><S>     */
  285. #define TOGGLE    0x1400        /* <ALT><T>    */
  286. #define VIEW    0x2f00          /* <ALT><V>     */
  287. #define WRITE   0x1100          /* <ALT><W>     */
  288. #define DONE2    0x2d00        /* <ALT><X>    */
  289. #define SEARCHD    0x2c00        /* <ALT><Z>    */
  290. #define TOP     0x8400        /* CtrlPgUp    */
  291. #define BOTTOM    0x7600        /* CtrlPgDn    */
  292.  
  293.  
  294. /* Area macros */
  295.  
  296. #define CurBoard arealist[area].board
  297. #define CurAKA arealist[area].aka
  298.  
  299. /* replaced functions */
  300.  
  301. #define prependline(s)    (void)insertline(&msgbuf,msgbuf.first,(s))
  302. #define ptrfree(p)    {free(p);  p = NULL;}
  303.  
  304. /* prototypes */
  305.  
  306. void    main(int argc, char *argv[]);
  307. void    outamemory(void);
  308. int      scanmail(int area);            /* readmail.c   */
  309. int      showmsg(MSG);                          /* showmail.c   */
  310. BUFFER  buffer(char **);                        /* bufmsg.c     */
  311. void    opening(char *,char *,char *);          /* config.c     */
  312. int      nextmsg(int);                          /* msged.c      */
  313. void     parseareas(char *);                    /* areas.c      */
  314. int      selectarea(char *title);                   /* areas.c      */
  315. void     createmsg(void);                       /* makemsg.c    */
  316. void     showheader(MSG m);                     /* showmail.c   */
  317. void     newmsg(void);                       /* makemsg.c    */
  318. ADDRESS parsenode(char *s);                 /* config.c     */
  319. void     reply(void);                /* makemsg.c    */
  320. void     quote(void);                /* makemsg.c    */
  321. void     clearbuffer(BUFFER *buf);        /* bufmsg.c    */
  322. void    change(void);                /* makemsg.c    */
  323. void    import(LINE *l);            /* textfile.c    */
  324. void    export(LINE *f);            /* textfile.c    */
  325. void    movemsg(void);                /* maintmsg.c    */
  326. void    maintarea(void);            /* maintmsg.c    */
  327. void    writetxt(void);             /* textfile.c    */
  328. void    timestr(char *tim, char *dat);        /* makemsg.c    */
  329. BOOLEAN confirm(int confirmations);        /* msgedq.c    */
  330. void    settings(void);                         /* settings.c   */
  331. void    editheader(void);            /* makemsg.c    */
  332. void    save(MSG message);                      /* makemsg.c    */
  333. void    help(void);                             /* help.c       */
  334. void    list(void);                             /* msglist.c    */
  335. ADDRESS lookup(char *name, char *fn);           /* userlist.c   */
  336. int     dorot13(int c);                /* editmail.c    */
  337. void    rotate(void);                /* msged.c    */
  338.  
  339. int editmsg(void);                /* editmail.c    */
  340. void fatal(char *s);                /* msgedq.c    */
  341. void halt(int status);                /* msgedq.c    */
  342. void os(void);                    /* msgedq.c    */
  343. char *timedate(char *t, char *d, BOOLEAN longform);
  344.                         /* showmail.c    */
  345. void clear_attributes(MSGHEADER * h);        /* makemsg.c    */
  346. void cleanup(void);                /* qmsged.c    */
  347. void beep(int freq, int len);            /* qmsged.c    */
  348. void refresh(LINE * c, int y);            /* showmail.c    */
  349. char *bits2ascii(MSGBITS, BOOLEAN);        /* showmail.c    */
  350. char *formaddr(ADDRESS addr, int mask);        /* showmail.c    */
  351.  
  352. /* Message base functions in msgbase.c */
  353.  
  354. char *readtext(MSGHEADER *m);
  355. BOOLEAN readmsg(MSG *m, int msgnum);
  356. int newmsgnum(void);
  357. int writemsg(MSG *m);
  358. void formatorigin(char *buffer, char *origin, ADDRESS thisnode);
  359.  
  360. int searchuser(char *name, BOOLEAN create);
  361. int boardmsg(BYTE board, int cur);
  362. int searchto(BYTE board, int msgnum, char *name);
  363. BOOLEAN updatehigh(int usernum, int high);
  364. void working(BOOLEAN on);
  365. void helped(void);
  366. void helpedit(void);
  367. void helparea(void);
  368. void helplist(void);
  369.  
  370. /* editbuf.c */
  371. LINE *insertline(BUFFER *buf, LINE *cur, char *txt);
  372. void deleteline(BUFFER *buf, LINE *cur);
  373.  
  374. /* textfile.c */
  375. BOOLEAN writebuffile(char *path, BUFFER *buf);
  376. BOOLEAN readbuffile(char *path, BUFFER *buf);
  377.